package com.controladores.controlvehicular;

import java.util.Calendar;

import com.controladores.controlvehicular.R;
import com.controladores.controlvehicular.basededatos.GestorBaseDatos;
import com.controladores.controlvehicular.comunicacion.ComunicacionTCP;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Typeface;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

/**
 * Clase que muestra la información correspondiente a cada registro de control 
 * y opciones dependiendo el tipo de usuario
 * @author Luis Soto <lsantoniosoto@gmail.com>
 * @author Mariuxi Salinas <mariuxidelcisne@gmail.com>
 * @version 1.0, 11/04/2014
 */
public class InformacionRegistro extends Activity implements OnClickListener {
	private int espacio = 0;
	private String tipoRegistro = "", nombreUsuario, nombeZona, idSubcalle, fecha,
			horaActual, placaR;
	TextView etiquetaPlaca, etiquetaColor, etiquetaMarca, etiquetaHoraLlegada, etiquetaTipoMulta,
			etiquetaTituloVehiculo, etiquetaTipoUsuario;
	protected TextView fuenteInformacionVehiculo;
	private Button botonDetenerServicio, botonCancelar;
	private String mac="";

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_informacion_registro);
		
		inicializarComponentes();
		inicializarAccionesDeComponentes();
		cargarInformacionRegistro();
	}
	
	/**
	 * Inicializa los componentes de la interfaz correspondiente a la clase
	 */
	private void inicializarComponentes() {
		etiquetaPlaca = (TextView) findViewById(R.id.edPlaca);
		etiquetaColor = (TextView) findViewById(R.id.edColor);
		etiquetaMarca = (TextView) findViewById(R.id.edMarca);
		etiquetaHoraLlegada = (TextView) findViewById(R.id.edHoraLegada);
		etiquetaTipoMulta = (TextView) findViewById(R.id.edMulta);
		etiquetaTituloVehiculo = (TextView) findViewById(R.id.txtVTituloDetalleVehiculo);
		Typeface tipofuenteInfVehiculo = Typeface.createFromAsset(getAssets(),
				"RobotoCondensedRegular.ttf");
		etiquetaTituloVehiculo.setTypeface(tipofuenteInfVehiculo);
		etiquetaTipoUsuario = (TextView) findViewById(R.id.txtTipoUsuario);
		botonDetenerServicio = (Button) findViewById(R.id.btnDetenerServicio);
		botonCancelar = (Button) findViewById(R.id.btnCancelarInfo);
	}
	/**
	 * Inicializa los eventos de los componentes
	 */
	private void inicializarAccionesDeComponentes() {
		botonDetenerServicio.setOnClickListener(this);
		botonCancelar.setOnClickListener(this);
	}

	/**
	 * Carga la información del registro de control
	 */
	private void cargarInformacionRegistro() {
		Bundle listaRegistroCVR = getIntent().getExtras();
		espacio = listaRegistroCVR.getInt("espacio");
		tipoRegistro = listaRegistroCVR.getString("tipoRe");
		GestorBaseDatos CargarDatosVehiculo = new GestorBaseDatos(
				InformacionRegistro.this);
		CargarDatosVehiculo.abrirBaseDatos();
		String ex = "exonerado";
		String tarj = "tarjeta";
		String recar = "recarga";
		String mul = "multa";
		String datoPlaca, datoColor, datoMarca, datoHoraLlegada, datoTipoMulta;
		etiquetaPlaca.setText(" ");
		etiquetaColor.setText(" ");
		etiquetaMarca.setText(" ");
		try {
			if (tarj.compareTo(tipoRegistro) == 0) {
				etiquetaTipoUsuario.setText("Usuario de Tarjeta");
				datoPlaca = CargarDatosVehiculo.cargarPlacaTarjeta(espacio);
				etiquetaPlaca.setText(datoPlaca);
				datoColor = CargarDatosVehiculo.cargarColorTarjeta(espacio);
				etiquetaColor.setText(datoColor);
				datoMarca = CargarDatosVehiculo.cargarMarcaTarjeta(espacio);
				etiquetaMarca.setText(datoMarca);
				datoHoraLlegada = CargarDatosVehiculo
						.cargarHorallegadaTarjeta(espacio);
				etiquetaHoraLlegada.setText(datoHoraLlegada);
				datoTipoMulta = "";
				if (ZonaTrabajo1.obtenerMulta(espacio).compareTo("") != 0) {
					datoTipoMulta = ZonaTrabajo1.obtenerMulta(espacio);
				} else {
					if (ZonaTrabajo2.obtenerMulta(espacio).compareTo("") != 0) {
						datoTipoMulta = ZonaTrabajo2.obtenerMulta(espacio);
					} else {
						if (ZonaTrabajo3.obtenerMulta(espacio).compareTo("") != 0) {
							datoTipoMulta = ZonaTrabajo3.obtenerMulta(espacio);
						} else {
							if (ZonaTrabajo4.obtenerMulta(espacio)
									.compareTo("") != 0) {
								datoTipoMulta = ZonaTrabajo4
										.obtenerMulta(espacio);
							}
						}
					}
				}
				if (datoTipoMulta.compareTo("null") == 0) {
					etiquetaTipoMulta.setText("Sin Multa");
				} else {
					int intervalo = Integer.parseInt(datoTipoMulta);
					String descripcionMulta = CargarDatosVehiculo
							.consultarDescrip(intervalo);
					etiquetaTipoMulta.setText(descripcionMulta);
				}
			}
			if (recar.compareTo(tipoRegistro) == 0) {
				etiquetaTipoUsuario.setText("Usuario de Recarga");
				datoPlaca = CargarDatosVehiculo.cargarPlacaRecarga(espacio);
				etiquetaPlaca.setText(datoPlaca);
				datoColor = CargarDatosVehiculo.cargarColorRecarga(espacio);
				etiquetaColor.setText(datoColor);
				datoMarca = CargarDatosVehiculo.cargarMarcaRecarga(espacio);
				etiquetaMarca.setText(datoMarca);
				datoHoraLlegada = CargarDatosVehiculo
						.cargarHorallegadaRecarga(espacio);
				etiquetaHoraLlegada.setText(datoHoraLlegada);
			}
			if (ex.compareTo(tipoRegistro) == 0) {
				etiquetaTipoUsuario.setText("Exonerado");
				datoPlaca = CargarDatosVehiculo.cargarPlacaExonerado(espacio);
				etiquetaPlaca.setText(datoPlaca);
				datoColor = CargarDatosVehiculo.cargarColorExonerado(espacio);
				etiquetaColor.setText(datoColor);
				datoMarca = CargarDatosVehiculo.cargarMarcaExonerado(espacio);
				etiquetaMarca.setText(datoMarca);
				datoHoraLlegada = CargarDatosVehiculo
						.cargarHorallegadaExonerados(espacio);
				etiquetaHoraLlegada.setText(datoHoraLlegada);
			}
			if (mul.compareTo(tipoRegistro) == 0) {
				etiquetaTipoUsuario.setText("Usuario Infractor");
				datoPlaca = CargarDatosVehiculo.cargarPlacaMulta(espacio);
				etiquetaPlaca.setText(datoPlaca);
				datoColor = CargarDatosVehiculo.cargarColorMulta(espacio);
				etiquetaColor.setText(datoColor);
				datoMarca = CargarDatosVehiculo.cargarMarcaMulta(espacio);
				etiquetaMarca.setText(datoMarca);
				datoHoraLlegada = CargarDatosVehiculo
						.cargarHorallegadaMulta(espacio);
				etiquetaHoraLlegada.setText(datoHoraLlegada);
				String descripcionMulta = CargarDatosVehiculo
						.cargarDescripcionMulta(espacio);
				etiquetaTipoMulta.setText(descripcionMulta);
			}
			CargarDatosVehiculo.close();

		} catch (Exception e) {
			// TODO: handle exception
		}
	}
	/**
	 * Muestra un mensaje
	 * @param mensaje
	 */
	private void mostrarMensaje(String mensaje) {
		Toast.makeText(this, mensaje, Toast.LENGTH_LONG).show();
	}
	
	/**
	 * Cancela la interfaz
	 */
	private void cancelar() {
		Intent aZona = new Intent(InformacionRegistro.this, ZonasControl.class);
		startActivity(aZona);
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// TODO Auto-generated method stub

		switch (item.getItemId()) {

		case R.id.menu_NuevoRegistro:
			Intent aRegistroT = new Intent(InformacionRegistro.this,
					RegistrarTarjeta.class);
			GestorBaseDatos cargarDatosControlVehiculo = new GestorBaseDatos(
					InformacionRegistro.this);
			cargarDatosControlVehiculo.abrirBaseDatos();
			String nuevoRegistro="nuevoRegistro";
			aRegistroT.putExtra("espacio", espacio);
			aRegistroT.putExtra("tipoRe", nuevoRegistro);
			startActivity(aRegistroT);

			break;
		case R.id.menu_Actualizar:
			enviarTramaConfirmacionVehiculoRecarga("1");
			Toast.makeText(getBaseContext(), "Datos enviados",
					Toast.LENGTH_LONG).show();
			break;
		case R.id.menu_Multa:
			String multaTiempo = "";
			try {
				if (ZonaTrabajo1.obtenerMulta(espacio).compareTo("") != 0) {
					multaTiempo = ZonaTrabajo1.obtenerMulta(espacio);
				} else {
					if (ZonaTrabajo2.obtenerMulta(espacio).compareTo("") != 0) {
						multaTiempo = ZonaTrabajo2.obtenerMulta(espacio);
					} else {
						if (ZonaTrabajo3.obtenerMulta(espacio).compareTo("") != 0) {
							multaTiempo = ZonaTrabajo3.obtenerMulta(espacio);
						} else {
							if (ZonaTrabajo4.obtenerMulta(espacio)
									.compareTo("") != 0) {
								multaTiempo = ZonaTrabajo4
										.obtenerMulta(espacio);
							}
						}
					}
				}
			} catch (Exception e) {
				// TODO: handle exception
			}

			Toast.makeText(getApplicationContext(), multaTiempo,
					Toast.LENGTH_LONG).show();
			String TipoMultaTiempo = "TipoMultaTiempo";
			Intent aMulta = new Intent(InformacionRegistro.this,
					RegistrarMulta.class);
			aMulta.putExtra("espacio", espacio);
			aMulta.putExtra("tipoRe", tipoRegistro);
			aMulta.putExtra("multaT", multaTiempo);
			aMulta.putExtra("TipoMultaTiempo", TipoMultaTiempo);
			startActivity(aMulta);

			break;

		}
		return super.onOptionsItemSelected(item);

	}

	@Override
	public boolean onPrepareOptionsMenu(Menu menu) {
		// TODO Auto-generated method stub
		String ex = "exonerado";
		String tarj = "tarjeta";
		String recar = "recarga";
		String mulR = "recargamulta";
		String mul = "multa";
		menu.clear();
		try {
			if (tarj.compareTo(tipoRegistro) == 0) {
				if (ZonaTrabajo1.obtenerMulta(espacio).compareTo("null") == 0) {
					menu.clear();
					getMenuInflater().inflate(R.menu.detalle_vehiculo_menu4,
							menu);
				} else {
					menu.clear();
					getMenuInflater().inflate(R.menu.detalle_vehiculo_menu3,
							menu);
				}
			}
			if (recar.compareTo(tipoRegistro) == 0) {
				getMenuInflater().inflate(R.menu.detalle_vehiculo_menu2, menu);
			}
			if (mulR.compareTo(tipoRegistro) == 0) {
				menu.clear();
			}
			if (ex.compareTo(tipoRegistro) == 0) {
				menu.clear();
			}
			if (mul.compareTo(tipoRegistro) == 0) {
				menu.clear();
			}

		} catch (Exception e) {
			// TODO: handle exception
		}
		return true;
	}
	/**
	 * Envía datos de confirmación en cuanto a usuarios de Recarga web
	 * @param confirmacion Datos a enviar
	 */
	public void enviarTramaConfirmacionVehiculoRecarga(String confirmacion) {
		GestorBaseDatos obtener = new GestorBaseDatos(InformacionRegistro.this);
		obtener.abrirBaseDatos();
		nombreUsuario = obtener.cargarNombreUsuario(espacio);
		nombeZona = obtener.cargarNombreZona(espacio);
		idSubcalle = obtener.cargarIdSubcalle(espacio);
		fecha = obtener.cargarFecha(espacio);
		Calendar c = Calendar.getInstance();
		horaActual = c.get(Calendar.HOUR_OF_DAY) + ":" + c.get(Calendar.MINUTE);

		placaR = obtener.cargarPlaca(espacio); 
		obtener.close();
		String valor = "";
		GestorBaseDatos manejador = new GestorBaseDatos(InformacionRegistro.this);
		try {
			manejador.abrirBaseDatos();
			mac=manejador.obtenerMac();
			manejador.close();
		} catch (Exception e) {
			// TODO: handle exception
		}
		ComunicacionTCP comunicacion = new ComunicacionTCP();
		valor = comunicacion.gestionarConexionConfirmacionVehiculoRecarga(
				confirmacion, nombreUsuario, nombeZona, idSubcalle, fecha,
				horaActual, placaR,mac);
		if (valor.compareToIgnoreCase("e") == 0) {
			Intent aZona = new Intent(InformacionRegistro.this,
					ZonasControl.class);
			startActivity(aZona);
			mostrarMensaje("Algo ha ido mal en la comunicación.");

		}
		if (valor.compareToIgnoreCase("1") == 0) {
			if (confirmacion.compareToIgnoreCase("1") == 0) {
				Intent aZona = new Intent(InformacionRegistro.this,
						ZonasControl.class);
				startActivity(aZona);
				mostrarMensaje("Los datos se enviaron correctamente.");
			}
			if (confirmacion.compareToIgnoreCase("0") == 0) {
				mostrarMensaje("Los datos se enviaron correctamente.");
				try {
					GestorBaseDatos detenerServicio = new GestorBaseDatos(
							getBaseContext());
					detenerServicio.abrirBaseDatos();
					detenerServicio.eliminarRegistroRecargas(espacio);
					detenerServicio.close();
					Intent aZona = new Intent(InformacionRegistro.this,
							ZonasControl.class);
					startActivity(aZona);
					Toast.makeText(getApplicationContext(),
							"Los Datos fueron enviados ", Toast.LENGTH_LONG)
							.show();
				} catch (Exception e) {
					Toast.makeText(getApplicationContext(),
							"Los Datos no fueron enviados ", Toast.LENGTH_LONG)
							.show();
				}
				mostrarMensaje("Los datos se enviaron correctamente.");
			}

		}
	}

	@Override
	public void onClick(View view) {
		// TODO Auto-generated method stub
		if (view.equals(botonDetenerServicio)) {
			try {

				GestorBaseDatos detenerServicio = new GestorBaseDatos(
						InformacionRegistro.this);

				detenerServicio.abrirBaseDatos();
				String ex = "exonerado";
				String tarj = "tarjeta";
				String recar = "recarga";
				String mul = "multa";

				Toast.makeText(getBaseContext(), " " + espacio,
						Toast.LENGTH_LONG).show();
				if (tarj.compareTo(tipoRegistro) == 0) {
					Toast.makeText(getBaseContext(), "bien tarjeta",
							Toast.LENGTH_LONG).show();
					detenerServicio.eliminarRegistroTarjeta(espacio);
					ZonaTrabajo1.detenerServicioDetalleVehiculo(espacio);
					detenerServicio.close();
					Intent aZona = new Intent(InformacionRegistro.this,
							ZonasControl.class);
					startActivity(aZona);

				}
				if (recar.compareTo(tipoRegistro) == 0) {
					enviarTramaConfirmacionVehiculoRecarga("0");
					Intent aZona = new Intent(InformacionRegistro.this,
							ZonasControl.class);
					startActivity(aZona);

				}
				if (ex.compareTo(tipoRegistro) == 0) {
					detenerServicio.eliminarRegistroExonerado(espacio);
					Toast.makeText(getBaseContext(), "bien exonerado",
							Toast.LENGTH_LONG).show();
					detenerServicio.close();
					Intent aZona = new Intent(InformacionRegistro.this,
							ZonasControl.class);
					startActivity(aZona);
				}
				if (mul.compareTo(tipoRegistro) == 0) {
					detenerServicio.eliminarRegistroMulta(espacio);
					Intent aZona = new Intent(InformacionRegistro.this,
							ZonasControl.class);
					startActivity(aZona);
				}
			} catch (Exception e) {
				
			}
		}
		if (view.equals(botonCancelar)) {
			cancelar();
		}
	}
}
